package com.heng.a1_源码分析;

public class a1_SpringApplication {
    // 1. 构造方法
    // public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
    // 在构造方法中推断出 程序的类型
    // 在构造方法中，主要初始化器，将初始化器
    // StackWalker这是什么栈？


    //        this.sources = new LinkedHashSet();
    // linkedHashSet数据结构
    // 存储： 主应用类、配置类


    //        this.bannerMode = Mode.CONSOLE;


    //        this.logStartupInfo = true;



    //        this.addCommandLineProperties = true;
    //        this.addConversionService = true;
    //        this.headless = true;
    //        this.registerShutdownHook = true;
    //        this.additionalProfiles = Collections.emptySet();
    //        this.isCustomEnvironment = false;
    //        this.lazyInitialization = false;
    //        this.applicationContextFactory = ApplicationContextFactory.DEFAULT;
    //        this.applicationStartup = ApplicationStartup.DEFAULT;

    //        this.resourceLoader = resourceLoader;

    //        Assert.notNull(primarySources, "PrimarySources must not be null");
    //        this.primarySources = new LinkedHashSet(Arrays.asList(primarySources));
    //        this.webApplicationType = WebApplicationType.deduceFromClasspath();

    //        this.bootstrapRegistryInitializers = new ArrayList(this.getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
    // 用于注册更早期的单例对象或者其他引导阶段需要的组件

    //        this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
    // 注册应用上下文初始化器

    //        this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
    // 应用事件监听器


    //        this.mainApplicationClass = this.deduceMainApplicationClass();
    //    }


    // public ConfigurableApplicationContext run(String... args) {
    //        Startup startup = SpringApplication.Startup.create();
    // 精确测试各阶段的耗时

    //        if (this.registerShutdownHook) {
    //            shutdownHook.enableShutdownHookAddition();
    //        }

    //        DefaultBootstrapContext bootstrapContext = this.createBootstrapContext();
    // 创建引导上下文
    // 引导上下文的生命周期很短，应用启动之后就被销毁了。可以避免循环依赖。
    // 将一些耗时的初始化操作，提前到引导阶段，可以避免应用上下文创建的时候发生堵塞。
    // 在应用上下文创建之前，引导上下文会完成配置资源的加载
    // 为环境加载额外的配置源


    //        this.configureHeadlessProperty();
    //        SpringApplicationRunListeners listeners = this.getRunListeners(args);
    //        listeners.starting(bootstrapContext, this.mainApplicationClass);
    // 监听启动各阶段事件


    //            ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
    // 解析命令行参数。


    // ConfigurableEnvironment environment = this.prepareEnvironment(listeners, bootstrapContext, applicationArguments);
    // 环境：命令行参数、系统属性、环境变量、配置文件

    //            Banner printedBanner = this.printBanner(environment);

    //            context = this.createApplicationContext();
    // 创建容器，但是没有加载任何bean定义
    // AI说，beanFactory是ApplicationContext的核心底层组件，ApplicationContext在初始化的时候会立即创建BeanFactory

    //            context.setApplicationStartup(this.applicationStartup);

    // this.prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
    // 执行这个方法，


    //            this.refreshContext(context);

    //            this.afterRefresh(context, applicationArguments);

    //            startup.started();
    //            if (this.logStartupInfo) {
    //                (new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), startup);
    //            }
    //
    //            listeners.started(context, startup.timeTakenToStarted());


    //            this.callRunners(context, applicationArguments);
    // CommandLineRunner接口

    //        } catch (Throwable var10) {
    //            if (var10 instanceof AbandonedRunException) {
    //                throw var10;
    //            }
    //
    //            this.handleRunFailure(context, var10, listeners);
    //            throw new IllegalStateException(var10);
    //        }
    //
    //        try {
    //            if (context.isRunning()) {
    //                listeners.ready(context, startup.ready());
    //            }
    //
    //            return context;
    //        } catch (Throwable var9) {
    //            if (var9 instanceof AbandonedRunException) {
    //                throw var9;
    //            } else {
    //                this.handleRunFailure(context, var9, (SpringApplicationRunListeners)null);
    //                throw new IllegalStateException(var9);
    //            }
    //        }
    //    }
}
